export const getImg = (name : string) => {
	return new URL(`/src/assets/images/${name}`)
}



export function formatDate(date, format = 'YYYY-MM-DD') {
	let d;
	if (date instanceof Date) {
		d = date;
	} else if (typeof date === 'number' || typeof date === 'string') {
		// 如果是数字（时间戳）或字符串，尝试转换为 Date
		d = new Date(date);
	} else {
		// 如果无法解析，返回空或抛错，根据需求调整
		return '';
	}

	// 检查是否是有效日期
	if (isNaN(d.getTime())) {
		console.warn('Invalid date provided:', date);
		return '';
	}

	const year = d.getFullYear();
	const month = String(d.getMonth() + 1).padStart(2, '0'); // 月份从0开始
	const day = String(d.getDate()).padStart(2, '0');
	const hour = String(d.getHours()).padStart(2, "0");
	// 使用替换规则来格式化
	return format
		.replace(/YYYY/g, year)
		.replace(/YY/g, String(year).slice(-2))
		.replace(/MM/g, month)
		.replace(/M/g, String(d.getMonth() + 1)) // 不补零的月份
		.replace(/DD/g, day)
		.replace(/D/g, String(d.getDate()))
		.replace(/HH/g, day)
		.replace(/HH/g, hour)
		.replace(/h/g, String(d.getHours())) // 不补零的小时
		.replace(/mm/g, String(d.getMinutes()).padStart(2, "0"))
		.replace(/m/g, String(d.getMinutes())) // 不补零的分钟
		.replace(/SS/g, String(d.getSeconds()).padStart(2, "0"))
		.replace(/S/g, String(d.getSeconds())); // 不补零的秒
}


export const getDate = (date : string, AddDayCount = 0) => {
	if (!date) {
		date = new Date()
	}
	if (typeof date !== 'object') {
		date = date.replace(/-/g, '/')
	}
	const dd = new Date(date)

	dd.setDate(dd.getDate() + AddDayCount) // 获取AddDayCount天后的日期

	const y = dd.getFullYear()
	const m = dd.getMonth() + 1 < 10 ? '0' + (dd.getMonth() + 1) : dd.getMonth() + 1 // 获取当前月份的日期，不足10补0
	const d = dd.getDate() < 10 ? '0' + dd.getDate() : dd.getDate() // 获取当前几号，不足10补0
	return {
		fullDate: y + '-' + m + '-' + d,
		year: y,
		month: m,
		date: d,
		day: dd.getDay()
	}
}


export function calculateStayNights(startTime : string, endTime : string) {
	// 将时间转换为 Date 对象
	const start = new Date(startTime);
	const end = new Date(endTime);

	// 验证时间有效性
	if (isNaN(start.getTime()) || isNaN(end.getTime())) {
		throw new Error('无效的时间格式');
	}

	if (end <= start) {
		return 0; // 结束时间不能早于开始时间
	}

	// 计算毫秒差（忽略时分秒，只按日期计算）
	const startDate = new Date(start.getFullYear(), start.getMonth(), start.getDate());
	const endDate = new Date(end.getFullYear(), end.getMonth(), end.getDate());

	const timeDiff = endDate - startDate; // 毫秒差
	const nightCount = timeDiff / (1000 * 60 * 60 * 24); // 转换为天数

	return Math.floor(nightCount); // 向下取整，确保是整数晚数
}


export function ddStyleToChar(str:string, targetChar:any, style:string) {
  // 转义特殊字符，避免正则匹配出错
  const escapedChar = targetChar.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
  // 创建正则表达式（全局匹配）
  const regex = new RegExp(escapedChar, 'g');
  // 替换为带样式的 span 标签
  return str.replace(regex, `<span style="${style}">${targetChar}</span>`);
}
